package ar.uba.fi.algo3.algoTank;

import java.util.Random;

import ar.uba.fi.algo3.algoTank.Objetos.Objeto;
import ar.uba.fi.algo3.algoTank.Objetos.Territorio;
import ar.uba.fi.algo3.algoTank.Objetos.Posicion;
import ar.uba.fi.algo3.algoTank.Objetos.Ubicacion;

public abstract class CreadorDeObjetos {

	protected Territorio territorio;
	
	public CreadorDeObjetos(Territorio territorio){
		this.territorio = territorio;
	}
	
	public abstract Objeto crearObjeto();
	
	
	//devuelve un numero aleatorio entre 0 y max
	public int aleatorio(int max){
        Random random = new Random();
        int num = random.nextInt(max);
        return num;
	}

	
	//retorna una posicion con coordenadas aleatorias
	protected Posicion obtenerPosicionRandom() {
		int ancho = (int) territorio.getAncho();
        int alto = (int) territorio.getAlto();
        
        float x = (float) this.aleatorio(ancho);
        float y = (float) this.aleatorio(alto);

        return (new Posicion(x,y));
    }
	
	
	//le asigna al objeto creado una ubicacion libre
	public void asignarUbicacionValida(Objeto objeto) {
		objeto.setTerritorio(territorio);
		Ubicacion ubi = objeto.getUbicacion();
		
		//le asigno una ubicacion random hasta encontrar una libre
		boolean vale = false;
		while (!vale) {
		ubi.setPosicion(this.obtenerPosicionRandom());
		if (territorio.ubicacionLibre(ubi))
			vale = true;
		}		
	}
}
